package com.szrt.ms.manager;

import com.szrt.ms.entity.StudentEntity;

/**
 * StudentManager 等同一个班级
 *
 *总结：如何对数组进行初始化
 *		1.先提供一个对象数组的属性；private StudentEntity[] studentArray;
 *		2.在构造方法中进行具体的初始化;studentArray=new StudentEntity[length];
 *
 */
public class BanJi1612 {

	//学生的数组：对象数组
	private StudentEntity[] studentArray;
	
	
	
	public BanJi1612() {
		
	}


	/**
	 * 初始化一个数组 给这个数组分配内存空间  null
	 * @param length
	 */
	public BanJi1612(int length){
		studentArray=new StudentEntity[length];
	}
	

	public StudentEntity[] getStudents() {
		return studentArray;
	}



	public void setStudents(StudentEntity[] students) {
		this.studentArray = students;
	}
	
	
	/**
	 * 添加一个学生
	 * 思路：
	 * 	1.先判断在哪里添加
	 * 			数组默认值为null 
	 * 
	 * @param lyh  要添加的学生的对象
	 */
	public void add (StudentEntity lyh ){
		
		int counter=0;
		for(int i=0;i<studentArray.length;i++){
			StudentEntity cg=studentArray[i];
			if(cg!=null){
				counter++;
			}
		}
		
		if(counter<=studentArray.length-1){
			studentArray[counter]=lyh;
			System.out.print("第"+(counter+1)+"学生添加成功...");
			System.out.print("学生："+lyh);
			System.out.println();
		}else{
			System.out.print("第"+(counter+1)+"学生添加失败...");
			System.out.println("班级人数已经满了。请去下一个班...");
			System.out.println((counter+1) + "学生："+lyh);
			System.out.println();
		}
	}
	
	
	/**
	 * 修改学生
	 * @param name 学生的名字
	 * @param score 要修改的分数
	 */
	public void update(String name,double score){
		
		int xb=-1;
		//遍历学生数组，找到要修改的学生的下标
		for(int i=0;i<studentArray.length;i++){
			if(name.equals(studentArray[i].getName())){
				xb=i;
				break;
			}
		}
		
		//修改成新的分数
		if(xb!=-1){
			studentArray[xb].setScore(score);
		}else{
			System.out.println("没有学生的信息");
		}
	}
	
	
	/**
	 * 打印最高分
	 * @param studentArray 学生数组
	 * 
	 * 思路：(伪代码)
	 * 		1.遍历学生数组
	 * 		2.取得学生的成绩
	 * 		3.让第一个学生的成绩为最高分 然后从第二个学生开始依次跟max
	 * 		4.如果第2个学生的成绩比max成绩的要大，把第二个学生的成绩赋值给max
	 * 
	 * 在同一个类中不需要传参数
	 */
	public void searchScoreMax(){

		int len=studentArray.length;
		double max=0;
		double sco=0;
		int counter=-1;
		
		for(int i=0;i<len;i++){
			
			//学生对象为空时不比较
			if(studentArray[i].getName()!=null){
				
				sco=studentArray[i].getScore();
				if(sco>=max){
					max=sco;
					counter=i;
				}
			}
		}
		System.out.println("最高分的学生是："+studentArray[counter].getName()+"\t 分数："+studentArray[counter].getScore());
		
	}
	
	/**
	 * 打印最小成绩
	 * 
	 */
	public void searchScoreMin(){
		int len=studentArray.length;
		double min=101;
		double sco=0;
		int counter=-1;
		
		for(int i=0;i<len;i++){
			
			if(studentArray[i].getName()!=null){
				
				sco=studentArray[i].getScore();
				if(sco<min){
					min=sco;
					counter=i;
				}
			}
		}
		System.out.println("最低分的学生是："+studentArray[counter].getName()+"\t 分数："+studentArray[counter].getScore());
	}
	
	/**
	 * 计算性别的个数
	 * @param sex
	 * @return
	 */
	 public int getNumberOfMales(char sex){
		 int len=studentArray.length;
		 int counter=0;
		 for(int i=0;i<len;i++){
			 if(studentArray[i].getSex()==sex){
				 counter++;
			 }
		 }
		 
		 return counter;
	 }
	
	 /**
	  * 计算男女的个数
	  * @param sex
	  * @return 返回存放男女个数的数组
	  */
	 public int[] getxb(){
		 int[] num=new int[2];
		 int len=studentArray.length;
		 int nan=0;
		 int nv=0;
		 for(int i=0;i<len;i++){
			 
			 if(studentArray[i].getName()!=null){
			 
				 if(studentArray[i].getSex()=='男'){
					 num[0]=++nan;
				 }else{
					 num[1]=++nv;
				 }
			 }
		 }
		 return num;
	 }
	 
	 
	
	 /**
	  * 
	  * @return 有几个今年是本命年? 
	  */
	 public int benMingNian(){
		 
		 int len=studentArray.length;
		 int counter=0;
		 for(int i=0;i<len;i++){
			 if(studentArray[i].getAge()%12==0){
				 counter++;
			 }
		 }
		 
		 return counter;
	 }
	 
	 /**
	  * 删除1个学生
	  * @param name 要删除的名字
	  */
	 public void deleteOne(String name){
		 
		 int len=studentArray.length;
		 int xb=-1;
		 
		 for(int i=0;i<len;i++){
			 if(studentArray[i].getName().equals(name)){
				 xb=i;
				 break;
			 }
		 }
		 //所有数据向前移动一步
		 if(xb!=-1){
			 for(int i=0;i<len-1;i++){
				 if(i>=xb){
					 studentArray[i]=studentArray[i+1];
				 }
			 }
			 //把最后一个位置置空
			 studentArray[len-1]=null;
		 }
	 }
	 
	 
	 /**
	  * 查看在本班我有几个老乡
	  * @param name  要查找老乡的学生名字
	  * @return   老乡的个数
	  */
	 public int findLX(String name){
		 
		 int len=studentArray.length;
		 int counter=0;
		 String tx=null;
		 
		 //得到学生的城市
		 for(int i=0;i<len;i++){
			 if(studentArray[i].getName().equals(name)){
				 tx=studentArray[i].getCity();
				 break;
			 }
		 }
		 if(tx!=null){
			 //遍历得到老乡的个数
			 for(int i=0;i<len;i++){
				 if(studentArray[i].getCity().equals(tx)){
					 counter++;
				 }
			 }
		 }
		 return counter; 
	 }
	 /**
	  * 查看在本班我有几个老乡 都是谁? 
	  * @param name
	  * @return  老乡的数组
	  */
	 public StudentEntity[] findLXDetail(String name){
		 
		 int len=studentArray.length;
		 int counter=0;
		 String tx=null;
		 
		 //得到学生的城市
		 for(int i=0;i<len;i++){
			 if(studentArray[i].getName().equals(name)){
				 tx=studentArray[i].getCity();
				 break;
			 }
		 }
		 
		 //遍历得到老乡的个数
		 if(tx!=null){
			 for(int i=0;i<len;i++){
				 if(studentArray[i].getCity().equals(tx)){
					 counter++;
				 }
			 }
		 }
		 
		 //遍历得到老乡的数组
		 StudentEntity[] laoxiangs= new StudentEntity[counter-1];
		 
		 //老乡数组下标
		 int k=0;
		 for(int i=0;i<len;i++){
			 if(!studentArray[i].getName().equals(name)){
				 if(studentArray[i].getCity().equals(tx)){
					 laoxiangs[k]=studentArray[i];
					 k++;
				 }
			 }
		 }
		 
		 return laoxiangs;
	 }
	 
	 /**
	  * 一次性删除多个学生 
	  * @param names 要删除的学生数组
	  */
	 public void deleteMuchStudentByNames(String[] names){
		 
		 for(int i=0;i<names.length;i++){
			 
				 deleteOne(names[i]);
				 
		 }
	 }
	 
	 
}
